package com.neusoft.hifly.push.mobile.server;

import java.util.Map;

import com.neusoft.hifly.push.mobile.domain.JPushModelObj;
import com.neusoft.hifly.push.mobile.domain.ResultObj;

/**
 * Title: 消息推送中间件
 * <p>
 * Description: 推送接口
 * <p>
 * Copyright: 2019
 * <p>
 * Company: 东软汉枫
 *
 * @author lh_neu
 * @version 1.0.0
 */
public interface IJPushService {

	/**
	 * 向某些平台的所有设备推送alert消息
	 *
	 * @param masterSecret
	 *            极光推送MasterSecret
	 * @param appKey
	 *            极光推送AppKey
	 * @param platforms
	 *            某些平台(android,iOS),多个平台用,分隔
	 * @param message
	 *            推送消息内容
	 * @param sendUserLogicId
	 *            发送者logicId
	 * @param pushExtras
	 *            消息扩展参数
	 * @param pushType
	 *            推送环境类型(生产环境还是正式环境)
	 * @return 返回值
	 */
	ResultObj sendMobilePushAllPlatformAllDeviceAlert(String masterSecret, String appKey, String platforms,
			String message, long sendUserLogicId, Map<String, String> pushExtras, String pushType);

	/**
	 * 向某些平台，推送目标是别名为 alias，通知内容为 ALERT
	 *
	 * @param masterSecret
	 *            极光推送MasterSecret
	 * @param appKey
	 *            极光推送AppKey
	 * @param platforms
	 *            某些平台(android,iOS),多个平台用,分隔
	 * @param message
	 *            推送的消息
	 * @param sendUserLogicId
	 *            发送者用户逻辑ID
	 * @param alias
	 *            别名
	 * @param pushExtras
	 *            推送需要的其他扩展参数
	 * @param pushType
	 *            推送环境类型(生产环境还是正式环境)
	 * @return 返回值
	 */
	ResultObj sendMobilePushAllPlatformAliasAlert(String masterSecret, String appKey, String platforms, String message,
			long sendUserLogicId, String alias, Map<String, String> pushExtras, String pushType);

	/**
	 * 向某些平台，推送目标是标签名为 tags，通知内容为 ALERT
	 *
	 * @param masterSecret
	 *            极光推送MasterSecret
	 * @param appKey
	 *            极光推送AppKey
	 * @param platforms
	 *            某些平台(android,iOS),多个平台用,分隔
	 * @param message
	 *            推送的消息
	 * @param sendUserLogicId
	 *            发送者用户逻辑ID
	 * @param tags
	 *            标签名
	 * @param pushExtras
	 *            推送需要的其他扩展参数
	 * @param pushType
	 *            推送环境类型(生产环境还是正式环境)
	 * @return 返回值
	 */
	ResultObj sendMobilePushAllPlatformTagsAlert(String masterSecret, String appKey, String platforms, String message,
			long sendUserLogicId, String tags, Map<String, String> pushExtras, String pushType);

	/**
	 * 根据传入的json字符串来判断实现什么方式的推送通知内容为 ALERT
	 *
	 * @param jPushModelObj
	 *            极光推送所用实体
	 * @return 返回值
	 */
	ResultObj sendMobilePushAlertFromJson(JPushModelObj jPushModelObj);
}
